package com.ruoyi.classai.service;

import com.alibaba.fastjson2.JSONObject;
import com.github.yulichang.base.MPJBaseService;
import com.ruoyi.classai.domain.PxTrainingCourse;
import com.ruoyi.classai.domain.PxTrainingCourseComplete;
import com.ruoyi.classai.domain.PxTrainingCourseFile;
import com.ruoyi.classai.domain.PxTrainingCourseHomework;
import com.ruoyi.classai.domain.dto.px.PxCourseQuestionnaireDto;
import com.ruoyi.classai.domain.dto.px.PxTrainingCourseDto;
import com.ruoyi.classai.domain.dto.px.PxTrainingCourseHomeworkDto;
import com.ruoyi.classai.domain.dto.px.PxTrainingCourseVideoDto;
import com.ruoyi.classai.domain.vo.px.PxCourseQuestionnaireVo;
import com.ruoyi.classai.domain.vo.px.PxCourseVideoVo;
import com.ruoyi.classai.domain.vo.px.PxTrainingCourseVo;

import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutionException;

/**
 * 培训课程Service接口
 * 
 * @author lcj
 * @date 2025-06-18
 */
public interface IPxTrainingCourseService extends MPJBaseService<PxTrainingCourse> {

    /**
     * 添加培训课程
     * @param pxTrainingCourse 培训课程信息
     */
    void addTrainingCourse(PxTrainingCourseDto pxTrainingCourse);


    /**
     * 修改培训课程
     * @param pxTrainingCourse 培训课程信息
     */
    void editTrainingCourse(PxTrainingCourseDto pxTrainingCourse);

    /**
     * 根据id查询课程信息
     * @param id 课程ID
     * @param type  0管理端1 教师端/小程序端
     * @return 课程信息
     */
    PxTrainingCourseVo getTrainingCourseById(String id,int type);

    /**
     * 查询培训课程扫码/作业/问卷状态
     * @param id 培训课程ID
     * @param teacherId 老师ID
     * @return 状态
     */
    PxTrainingCourseComplete getTrainingCourseStatus(String teacherId, String id);

    /**
     *  查询培训下面的课程列表
     * @param trainingId 培训id
     * @param teacherId 老师ID
     * @return 课程列表
     */
    List<PxTrainingCourse> getTrainingCourseList(String trainingId,String teacherId);


    /**
     * 查询老师课程线上视频记录列表
     * @param trainingCourseId 课程id
     * @param teacherId 老师id
     * @return 视频记录
     */
    List<PxCourseVideoVo> getCourseVideoList(String trainingCourseId, String teacherId);

    /**
     * 查询课程资料列表
     * @param trainingCourseId 课程id
     * @return 课程资料
     */
    List<PxTrainingCourseFile> getCourseDocumentList(String trainingCourseId);

    /**
     * 查询课后作业列表
     * @param trainingCourseId 课程id
     * @param teacherId 老师id
     * @return 作业列表
     */
    List<PxTrainingCourseHomework> getHomeworkList(String trainingCourseId, String teacherId);

    /**
     * 查询问卷调查列表
     * @param trainingCourseId 课程id
     * @param teacherId 老师id
     * @return 问卷调查列表
     */
    List<PxCourseQuestionnaireVo> getQuestionnaireList(String trainingCourseId, String teacherId);

    /**
     * 扫码签到
     * @param trainingCourseId 培训课程id
     * @param teacherId 老师id
     */
    void scanCodeSignin(String trainingCourseId,String teacherId);

    /**
     * 提交课后作业
     * @param trainingCourseHomework 作业
     */
    void addHomework(PxTrainingCourseHomeworkDto trainingCourseHomework);

    /**
     * 提交问卷调查
     * @param questionnaires 问卷信息
     */
    void addQuestionnaire(List<PxCourseQuestionnaireDto> questionnaires);

    /**
     * 提交视频记录
     * @param courseVideo 视频记录
     */
    void addCourseVideo(PxTrainingCourseVideoDto courseVideo);


    /**
     * 删除视频
     * @param videoId 视频id
     */
    void deleteVideo(String videoId);

    /**
     * 查询我的学分/作业/消息(小程序)
     * @param teacherId 老师id
     * @return 我的信息
     */
    JSONObject getMyCourseInfo(String teacherId) throws ExecutionException, InterruptedException;
}
